
#ifndef _ILIB_MATH_H_
#define _ILIB_MATH_H_

#include "ILibrary.h"

namespace BWE
{
	class ILibMath : public ILibrary
	{
	public:
		static ILibrary* Instance();

		static void abs_short(int argc, BValue* argv);
		static void abs_int(int argc, BValue* argv);
		static void abs_long(int argc, BValue* argv);
		static void abs_real(int argc, BValue* argv);
		static void abs_float(int argc, BValue* argv);
		static void abs_double(int argc, BValue* argv);

		static void acos_real(int argc, BValue* argv);
		static void acos_float(int argc, BValue* argv);
		static void acos_double(int argc, BValue* argv);

		static void acosh_real(int argc, BValue* argv);
		static void acosh_float(int argc, BValue* argv);
		static void acosh_double(int argc, BValue* argv);

		static void asin_real(int argc, BValue* argv);
		static void asin_float(int argc, BValue* argv);
		static void asin_double(int argc, BValue* argv);

		static void asinh_real(int argc, BValue* argv);
		static void asinh_float(int argc, BValue* argv);
		static void asinh_double(int argc, BValue* argv);

		static void atan_real(int argc, BValue* argv);
		static void atan_float(int argc, BValue* argv);
		static void atan_double(int argc, BValue* argv);

		static void atanh_real(int argc, BValue* argv);
		static void atanh_float(int argc, BValue* argv);
		static void atanh_double(int argc, BValue* argv);

		static void atan2_real(int argc, BValue* argv);
		static void atan2_float(int argc, BValue* argv);
		static void atan2_double(int argc, BValue* argv);

		static void cbrt_real(int argc, BValue* argv);
		static void cbrt_float(int argc, BValue* argv);
		static void cbrt_double(int argc, BValue* argv);

		static void ceil_real(int argc, BValue* argv);
		static void ceil_float(int argc, BValue* argv);
		static void ceil_double(int argc, BValue* argv);

		static void copysign_real(int argc, BValue* argv);
		static void copysign_float(int argc, BValue* argv);
		static void copysign_double(int argc, BValue* argv);

		static void cos_real(int argc, BValue* argv);
		static void cos_float(int argc, BValue* argv);
		static void cos_double(int argc, BValue* argv);

		static void cosh_real(int argc, BValue* argv);
		static void cosh_float(int argc, BValue* argv);
		static void cosh_double(int argc, BValue* argv);

		static void erf_real(int argc, BValue* argv);
		static void erf_float(int argc, BValue* argv);
		static void erf_double(int argc, BValue* argv);

		static void erfc_real(int argc, BValue* argv);
		static void erfc_float(int argc, BValue* argv);
		static void erfc_double(int argc, BValue* argv);

		static void exp_real(int argc, BValue* argv);
		static void exp_float(int argc, BValue* argv);
		static void exp_double(int argc, BValue* argv);

		static void exp2_real(int argc, BValue* argv);
		static void exp2_float(int argc, BValue* argv);
		static void exp2_double(int argc, BValue* argv);

		static void expm1_real(int argc, BValue* argv);
		static void expm1_float(int argc, BValue* argv);
		static void expm1_double(int argc, BValue* argv);

		static void fabs_real(int argc, BValue* argv);
		static void fabs_float(int argc, BValue* argv);
		static void fabs_double(int argc, BValue* argv);

		static void fdim_real(int argc, BValue* argv);
		static void fdim_float(int argc, BValue* argv);
		static void fdim_double(int argc, BValue* argv);

		static void floor_real(int argc, BValue* argv);
		static void floor_float(int argc, BValue* argv);
		static void floor_double(int argc, BValue* argv);

		static void fma_real(int argc, BValue* argv);
		static void fma_float(int argc, BValue* argv);
		static void fma_double(int argc, BValue* argv);

		static void fmax_real(int argc, BValue* argv);
		static void fmax_float(int argc, BValue* argv);
		static void fmax_double(int argc, BValue* argv);

		static void fmin_real(int argc, BValue* argv);
		static void fmin_float(int argc, BValue* argv);
		static void fmin_double(int argc, BValue* argv);

		static void fmod_real(int argc, BValue* argv);
		static void fmod_float(int argc, BValue* argv);
		static void fmod_double(int argc, BValue* argv);

		static void frexp_real(int argc, BValue* argv);
		static void frexp_float(int argc, BValue* argv);
		static void frexp_double(int argc, BValue* argv);

		static void hypot_real(int argc, BValue* argv);
		static void hypot_float(int argc, BValue* argv);
		static void hypot_double(int argc, BValue* argv);

		static void ilogb_real(int argc, BValue* argv);
		static void ilogb_float(int argc, BValue* argv);
		static void ilogb_double(int argc, BValue* argv);

		static void ldexp_real(int argc, BValue* argv);
		static void ldexp_float(int argc, BValue* argv);
		static void ldexp_double(int argc, BValue* argv);

		static void lgamma_real(int argc, BValue* argv);
		static void lgamma_float(int argc, BValue* argv);
		static void lgamma_double(int argc, BValue* argv);

		static void log_real(int argc, BValue* argv);
		static void log_float(int argc, BValue* argv);
		static void log_double(int argc, BValue* argv);

		static void log10_real(int argc, BValue* argv);
		static void log10_float(int argc, BValue* argv);
		static void log10_double(int argc, BValue* argv);

		static void log1p_real(int argc, BValue* argv);
		static void log1p_float(int argc, BValue* argv);
		static void log1p_double(int argc, BValue* argv);

		static void log2_real(int argc, BValue* argv);
		static void log2_float(int argc, BValue* argv);
		static void log2_double(int argc, BValue* argv);

		static void logb_real(int argc, BValue* argv);
		static void logb_float(int argc, BValue* argv);
		static void logb_double(int argc, BValue* argv);

		static void modf_real(int argc, BValue* argv);
		static void modf_float(int argc, BValue* argv);
		static void modf_double(int argc, BValue* argv);

		static void nearbyint_real(int argc, BValue* argv);
		static void nearbyint_float(int argc, BValue* argv);
		static void nearbyint_double(int argc, BValue* argv);

		static void nextafter_real(int argc, BValue* argv);
		static void nextafter_float(int argc, BValue* argv);
		static void nextafter_double(int argc, BValue* argv);

		static void nexttoward_real(int argc, BValue* argv);
		static void nexttoward_float(int argc, BValue* argv);
		static void nexttoward_double(int argc, BValue* argv);

		static void pow_real(int argc, BValue* argv);
		static void pow_float(int argc, BValue* argv);
		static void pow_double(int argc, BValue* argv);

		static void remainder_real(int argc, BValue* argv);
		static void remainder_float(int argc, BValue* argv);
		static void remainder_double(int argc, BValue* argv);

		static void remquo_real(int argc, BValue* argv);
		static void remquo_float(int argc, BValue* argv);
		static void remquo_double(int argc, BValue* argv);

		static void rint_real(int argc, BValue* argv);
		static void rint_float(int argc, BValue* argv);
		static void rint_double(int argc, BValue* argv);

		static void round_real(int argc, BValue* argv);
		static void round_float(int argc, BValue* argv);
		static void round_double(int argc, BValue* argv);

		static void scalbln_real(int argc, BValue* argv);
		static void scalbln_float(int argc, BValue* argv);
		static void scalbln_double(int argc, BValue* argv);

		static void scalbn_real(int argc, BValue* argv);
		static void scalbn_float(int argc, BValue* argv);
		static void scalbn_double(int argc, BValue* argv);

		static void sin_real(int argc, BValue* argv);
		static void sin_float(int argc, BValue* argv);
		static void sin_double(int argc, BValue* argv);

		static void sinh_real(int argc, BValue* argv);
		static void sinh_float(int argc, BValue* argv);
		static void sinh_double(int argc, BValue* argv);

		static void sqrt_real(int argc, BValue* argv);
		static void sqrt_float(int argc, BValue* argv);
		static void sqrt_double(int argc, BValue* argv);

		static void tan_real(int argc, BValue* argv);
		static void tan_float(int argc, BValue* argv);
		static void tan_double(int argc, BValue* argv);

		static void tanh_real(int argc, BValue* argv);
		static void tanh_float(int argc, BValue* argv);
		static void tanh_double(int argc, BValue* argv);

		static void tgamma_real(int argc, BValue* argv);
		static void tgamma_float(int argc, BValue* argv);
		static void tgamma_double(int argc, BValue* argv);

		static void trunc_real(int argc, BValue* argv);
		static void trunc_float(int argc, BValue* argv);
		static void trunc_double(int argc, BValue* argv);

	};

}
#endif
